/*
 题目:
 实现数组扩容。
 自定义数组长度（用户指定），扩容规则：
 当已存储元素数量达到总容量的 80%时，扩容到原容量的1.5 倍。
 例如，原容量是 10，当输入第 8 个元素时，数组进行扩容，容量从 10 变 15。
 */

import java.util.Arrays;
import java.util.Scanner;

public class ArrayTest {

    public static void main(String[] args) {

        // 1. 创建一个自定义长度的数组（用户指定长度）
        Scanner sc = new Scanner(System.in);
        System.out.println("请您定义数组的长度（长度为正整数）：");
        int len = sc.nextInt();
        int[] arr = new int[len];
        System.out.println("您已创建了一个长度为 " + len + " 的数组");

        // 2. 提示用户输入元素，并实现自动扩容
        int big_len;
        int[] big_arr;
        for (int i = 0; i < len; i++) {

            System.out.println("请您输入一个整数，作为数组中的元素：");
            int num = sc.nextInt();
            arr[i] = num;
            // 添加后，向用户反馈
            System.out.println("已将 "+num+" 加入数组,现数组(含默认值)为:"+ Arrays.toString(arr)+",容量为："+len);

            //当元素数量达到总容量的 80%时，扩容：
            if( i+1 >= len*0.8){
                // 使用 “进一法”的方式，定义新数组的容量，并为big_arr分配内存空间
                big_len = (int)(Math.ceil(len*1.5));
                big_arr = new int[big_len];
                len = big_len;
                // 拷贝原先的数据，到这个更大的数组中
                for (int j = 0; j <= i; j++) {
                    big_arr[j] = arr[j];
                }
                // 指针指向新的数组, 并告知用户已经扩容
                arr = big_arr;
                System.out.println("检测到元素的数量已达到容量的 80%，程序对数组进行了扩容，现在的容量为："+ len);

                // 提示用户是否继续输入
                System.out.println("您是否需要继续输入元素？ 输入任意字符继续，输入quit退出程序：");
                String str = sc.next();
                if(str.equals("quit")){
                    System.out.println("程序结束！");
                    break;
                }
            }
        }
    }
}
